using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    // 单例
    public static GameManager instance { get; private set; }
    
    // 游戏类型：本地单人对战AI
    public enum GameType { LocalVsAI }
    
    [Header("游戏设置")]
    public GameType gameType = GameType.LocalVsAI;
    
    [Header("玩家相关")]
    public Player localPlayer;   // 本地玩家
    public Player aiPlayer;      // AI玩家
    
    [Header("UI相关")]
    public Text gameStateText;   // 状态文本
    
    [Header("组件引用")]
    public InputManager inputManager;
    public BattleSceneManager battleManager;
    
    [Header("难度设置")]
    [Range(0f, 1f)]
    public float aiDifficultyLevel = 0.5f; // 0=简单，1=困难
    
    // 游戏状态
    private bool isGameOver = false;

    private void Awake()
    {
        // 设置单例
        if (instance != null && instance != this)
        {
            Destroy(gameObject);
            return;
        }
        instance = this;
        
        // 切换场景时不销毁
        DontDestroyOnLoad(gameObject);
    }
    
    private void Start()
    {
        // 初始化组件引用
        InitializeComponents();
        
        // 初始化游戏状态
        UpdateGameState("游戏准备中...");
    }
    
    // 初始化和查找组件引用
    private void InitializeComponents()
    {
        // 如果没有找到输入管理器，尝试查找
        if (inputManager == null)
            inputManager = FindObjectOfType<InputManager>();
            
        // 如果没有找到战斗管理器，尝试查找
        if (battleManager == null)
            battleManager = FindObjectOfType<BattleSceneManager>();
            
        // 如果没有找到本地玩家，尝试查找
        if (localPlayer == null)
        {
            GameObject localPlayerObj = GameObject.Find("LocalPlayer");
            if (localPlayerObj != null)
                localPlayer = localPlayerObj.GetComponent<Player>();
        }
            
        // 如果没有找到AI玩家，尝试查找
        if (aiPlayer == null)
        {
            GameObject aiPlayerObj = GameObject.Find("AIPlayer");
            if (aiPlayerObj != null)
                aiPlayer = aiPlayerObj.GetComponent<Player>();
        }
    }
    
    // 输入单词正确时的处理
    public void OnWordCorrect(string word)
    {
        if (isGameOver) return;
        
        // 计算伤害值：基于单词长度和难度
        int damage = CalculateDamage(word);
        
        // 对AI玩家造成伤害
        if (battleManager != null)
        {
            battleManager.DamageAIPlayer(damage);
            battleManager.ShowBattleMessage($"你对敌人造成了{damage}点伤害！");
        }
        else if (aiPlayer != null)
        {
            aiPlayer.TakeDamage(damage);
        }
        
        // 触发AI回应
        Invoke("AiResponse", Random.Range(1f, 3f));
    }
    
    // 触发AI行动
    private void AiResponse()
    {
        if (isGameOver || localPlayer == null) return;
        
        // 简单计算AI伤害：随机值 + 基于难度的加成
        int baseDamage = Random.Range(Player.MIN_DAMAGE, Player.MAX_DAMAGE + 1);
        int aiDamage = Mathf.RoundToInt(baseDamage * (1f + aiDifficultyLevel * 0.5f));
        
        // 对本地玩家造成伤害
        if (battleManager != null)
        {
            battleManager.DamageLocalPlayer(aiDamage);
            battleManager.ShowBattleMessage($"敌人对你造成了{aiDamage}点伤害！");
        }
        else
        {
            localPlayer.TakeDamage(aiDamage);
        }
    }
    
    // 计算玩家造成的伤害
    private int CalculateDamage(string word)
    {
        // 基础伤害
        int baseDamage = Player.MIN_DAMAGE;
        
        // 基于单词长度增加伤害
        int lengthBonus = Mathf.Min(word.Length * 2, 10); // 每字母+2伤害，上限10
        
        // 检查是否包含难字母
        int difficultyBonus = 0;
        string hardLetters = "jqxzwk";
        foreach (char letter in word.ToLower())
        {
            if (hardLetters.Contains(letter.ToString()))
            {
                difficultyBonus += 2; // 每个难字母+2伤害
            }
        }
        
        // 总伤害 = 基础伤害 + 长度加成 + 难度加成
        int totalDamage = baseDamage + lengthBonus + difficultyBonus;
        
        // 确保伤害在合理范围内
        return Mathf.Clamp(totalDamage, Player.MIN_DAMAGE, Player.MAX_DAMAGE);
    }
    
    // 更新游戏状态文本
    public void UpdateGameState(string message)
    {
        if (gameStateText != null)
        {
            gameStateText.text = message;
        }
    }
    
    // 游戏结束处理
    public void GameOver(bool playerWon)
    {
        isGameOver = true;
        
        // 禁用输入
        if (inputManager != null)
            inputManager.enabled = false;
            
        // 显示游戏结束信息
        UpdateGameState(playerWon ? "游戏结束：你获胜了！" : "游戏结束：你失败了！");
    }
    
    // 重新开始游戏
    public void RestartGame()
    {
        // 重置状态
        isGameOver = false;
        
        // 重新加载当前场景
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
    
    // 返回主菜单
    public void ReturnToMainMenu()
    {
        // 重置状态
        isGameOver = false;
        
        // 加载主菜单场景
        SceneManager.LoadScene("MainMenu");
    }
} 